It's time to send a flower to your lover!
本文作者:李嘉琪,中南财经政法大学金融学院
本文编辑:孙一博
技术总编:王子一
Stata&Python云端课程来啦!
为了平衡团队运营成本,维系公众号的运营,也与国内动辄数千元的Stata课程缩短差距,我们的网课不得不上调价格,我们决定于2022年4月1日起调价,Python课程的价格调整为399.9元,Stata基础课程调为399.9元,Stata进阶课程调整到399.9元。大家可以告知一下身边想要购买的小伙伴,欲购从速哦,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言~我们在这篇推文提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~
在古希腊神话中,玫瑰集爱与美于一身,既是美神的化身,又溶进了爱神的血液。现代人的生活时常匆匆忙忙,你在日常生活中是不是常常忙于工作、忙于学业,而忘记停下来、感受慢生活、感受身边人传递的爱,是不是很久没有给心爱的人送一枝花了?既然如此,不如用Python为心爱的那个人画一朵玫瑰花吧!这朵花不仅可以保存很久,而且还可以传达自己的拳拳爱意和牵挂。
turtle库也叫海龟绘图,最初是为了用来引导孩子学习编程的。海龟作图常被用作新手学习 Python 的一种方式。turtle库是Python语言中一个很流行的绘制图像的函数库,如同一个小乌龟,根据一组函数指令的控制,在一个横轴为x、纵轴为y的坐标系原点移动,爬行的路径形成了图形,一般默认的起点位置为(0,0)。其实,当我们了解了turtle函数库,就会发现用它不仅可以画玫瑰花,还可以画中国结、圣诞树、森林、蜡笔小新、以及复杂的数学图案。以下部分将从turtle函数库的基础操作和玫瑰花示例两个内容进行介绍。在学习基础操作前,首先要在Python中导入该函数库。
import turtle
1.画布
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
2.画笔
有了画布,大画家们就该拿起画笔啦。画家需要挑选颜色、画线的粗细、设置画笔移动的速度。
turtle.pensize()#设置画笔的宽度;
turtle.speed(speed)#设置画笔移动速度
turtle.pencolor()#设置画笔颜色
3.绘图
接下来画家们就可以大展身手啦,绘图的常用命令如下:
** 功能** | |
---|---|
turtle.forward(distance) | 画笔向前移动距离 |
turtle.backward(distance) | 画笔向后移动距离 |
turtle.right(degree) | 画笔顺时针移动角度 |
turtle.left(degree) | 画笔逆时针移动角度 |
penup() | 提笔移动(只移不画) |
pendown() | 落笔移动(边画边移) |
turtle.goto(x,y) | 画笔将要移到位置(x,y) |
turtle.circle() | 画圆 |
turtle.fillcolor(colorstring) | 填充颜色 |
turtle.end_fill(colorstring) | 结束填充 |
setx( ) | 将当前x轴移动到指定位置 |
sety( ) | 将当前y轴移动到指定位置 |
setheading(angle) | 设置当前朝向为angle角度 |
home() | 设置当前画笔位置为原点,朝向东 |
dot(r) | 绘制一个指定直径和颜色的圆点 |
turtle.done() | 必须是乌龟图形程序中的最后一个语句,表示结束 |
turtle.hideturtle() | turtle小箭头不可见 |
其中,下面的命令十分常用,它是以给定半径画圆。
turtle.circle(radius, extent=None, steps=None)
radius为半径,半径为正表示圆心在画笔的左边;半径为负,表示圆心在画笔的右边。extent表示弧度。steps 用于做半径为radius的圆的内切正多边形,多边形边数为steps。
二、绘制玫瑰花及贺卡
玫瑰称为爱情之花,而不同的颜色代表的意义不同。我们在用Python的turtle函数库画玫瑰的时候,可以根据自己的需求,填充不同的颜色。其中,红色玫瑰代表热情,热恋,我爱你。蓝色玫瑰代表奇迹与不可能实现的事。粉色玫瑰代表感动、暧昧之恋、铭记于心 、初恋,喜欢你那灿烂的笑容。白色玫瑰代表天真、纯洁、尊敬、谦卑,我足以与你相配。接下来我们以红玫瑰为例来试试吧。
1.选择画布和落笔点
首先我们要设置画布,设置其大小和颜色。然后设置画笔的粗细和速度。最后定位到落笔位置。其中使用了turtle.penup()、turtle.pendown() 命令定义了落笔的函数,简化程序。
import turtle #引入函数库
turtle.screensize(canvwidth=500, canvheight=500, bg='oldlace')# 设置画布
turtle.pensize(4) #设置画笔的粗细
turtle.speed(10) #设置画笔速度
def gotopos(x, y): #定义函数
turtle.penup() #提起画笔
turtle.goto(x, y) #定位到坐标(x,y)的位置
turtle.pendown() #放下画笔移动画笔开始绘制
turtle.ht()
#turtle.ht() 其中ht()=hideturtle(),它可以使turtle小箭头不可见,而且隐藏海龟可以明显提高图形的速度。
gotopos(150,180) #定位到坐标(150,180)的位置
2.绘制花骨朵的花蕊和花瓣
若想使得花骨朵显得自然,就不能用大段光滑的曲线直接绘制,而应该用曲线、直线小段小段的拼接而成,并且适时调整角度,所以这个过程比较繁琐,需要不停调整。
# 花骨朵的花蕊和轮廓
turtle.fillcolor("red") # 设置填充颜色为红色,当然也可以绘制其它颜色的玫瑰花
turtle.begin_fill() # 开始填充
turtle.circle(10, 180) # 画一圆,10是半径,180是弧度
turtle.circle(20, 120)
turtle.left(40) #角度逆时针旋转40度
turtle.circle(60, 30)
turtle.left(20)
turtle.circle(30, 100)
turtle.left(10)
turtle.circle(20, 90)
turtle.right(24) #角度顺时针旋转24度
turtle.fd(30) #沿此方向前进30个刻度
turtle.left(30)
turtle.circle(30, 90)
turtle.fd(20)
turtle.left(30)
turtle.fd(15)
turtle.circle(30, 60)
turtle.right(30)
turtle.circle(80, 50)
turtle.left(30)
turtle.fd(15)
turtle.left(30)
turtle.circle(75, 130)
#以下为花骨朵的轮廓
turtle.circle(150, 60)
turtle.left(60)
turtle.circle(120, 60)
turtle.fd(30)
turtle.left(10)
turtle.circle(140, 15)
turtle.end_fill() #结束填充
到此处,我们就可以得到如图所示的花骨朵啦。
3.绘制花瓣
接下来我们要为花骨朵最外层添加一层花瓣,其实就是绘制一条弧线,这条弧线是由圆心相反的两段弧线拼接而来。
turtle.left(150)
turtle.circle(-100, 60)
turtle.left(30)
turtle.circle(75, 70)
4.绘制叶子
#先绘制花骨朵下的两片小叶子
#左边的一片小叶子
turtle.fillcolor("green") # 填充颜色为绿色
turtle.begin_fill()
turtle.right(160)
turtle.circle(30, 90)
turtle.left(90)
turtle.circle(40, 80)
turtle.end_fill()
#右边的一片小叶子
turtle.fillcolor("green")
turtle.begin_fill()
turtle.right(100)
turtle.circle(30, 100)
turtle.left(100)
turtle.circle(40, 80)
turtle.end_fill()
#再绘制花枝和大叶子
#第一片大叶子
turtle.left(60)
turtle.fd(60)
turtle.right(135)
turtle.fillcolor("green")
turtle.begin_fill()
turtle.circle(80, 90)
turtle.left(90)
turtle.circle(80, 90)
turtle.end_fill()
#叶子的叶脉
turtle.left(135)
turtle.fd(60)
turtle.bk(60)
turtle.left(90)
turtle.fd(70)
#第二片大叶子
turtle.left(135)
turtle.fillcolor("green")
turtle.begin_fill()
turtle.circle(-80, 90)
turtle.right(90)
turtle.circle(-80, 90)
turtle.end_fill()
#叶子的叶脉
turtle.right(135)
turtle.fd(60)
turtle.bk(60)
turtle.right(90)
turtle.circle(-110, 90)
到这一步骤,玫瑰花已经绘制完啦,如图所示。
5.制作贺卡
若要在玫瑰花旁边绘制波浪线四边形的贺卡并添加四句祝福语,且这四句竖向排列、高度不一,我们可以继续如下操作。
gotopos(-30,60) #提笔,在(30,60)坐标处落笔
turtle.fillcolor("burlywood") #贺卡的颜色设置为burlywood
turtle.begin_fill()
#贺卡的四条边长度和形状相同,可以用循环简化程序。
for i in range(4):
for i in range(5): #每条边由五个圆弧组成
turtle.circle(20,70)
turtle.circle(-20,70)#绘制圆心相反的一段圆弧
turtle.left(90)
turtle.end_fill()
#写祝福语
def writez(x, y, str_): #定义一个函数以简化程序
gotopos(x, y)
turtle.write(str_, font=("楷体", 15))#设置字体为楷体,字号为15
s1 = "所得皆所期"
s2 = "所失亦无碍"
s3 = "所求皆所愿"
s4 = "所行皆坦途"
for i in range(len(s1)):
writez(-5, -30 - i * 30, s1[i])
#表示"所得皆所期"中的第一个字的位置为(-5,-30),第二个字的位置为(-5,-60),以此类推
for i in range(len(s2)):
writez(-35, -35 - i * 30, s2[i])
#表示 "所失亦无碍"中的第一个字的起始位置为(-35, -35),在上一句的右下方
for i in range(len(s3)):
writez(-65, -40 - i * 30, s3[i])
for i in range(len(s4)):
writez(-95, -45 - i * 30, s4[i])
turtle.done() #结束绘图且不会退出程序
到此处为止这份小礼物就做好啦,各位可以动动手,在上面程序的基础上进行优化调整,一方面可以熟悉turtle函数库的用法,另一方面可以为自己心爱的人送上专属于你们的小礼物,何乐而不为呢!
腾讯课堂课程二维码
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐 2021各省GDP新鲜出炉
爬虫实战-采集全国各省疫情数据
log——为你的操作保驾护航
一行代码教你玩转emoji
票房遇冷的春节档口碑冠军丨《狙击手》影评分析
学习丰县,营造良好营商环境!
大国丢娃图:从川渝到徐州!
丰县“失火”,殃及徐州:股市超跌近30亿!
Unicode转义字符——编码与解码
徐州!徐州!
B站弹幕爬虫——冬奥顶流冰墩墩&雪容融
不会用Stata做描述性统计表?so easy!
丰沛之地:备足姨妈巾
过年啦,用Python绘制一幅属于你的春联吧!
登上爬虫俱乐部“时光机” |上“机”出发 开启一段奇妙之旅【基础篇】查找并输出子字符串的定位
Stata中的小清新命令——添加观测值
PCA(主成分分析法)降维——Python实现
超好用的事件研究法
如何绘制任泽平《鼓励生育基金》的几幅图
Python 第六天——字符串
findname——想要什么找什么
Python字符串之“分分合合”
PDF转docx可批量操作?——wordconvert的小技巧
考研之后,文科生需以“do”躬“do”!
手绘五星兴家国——用Stata绘制五星红旗
Seminar丨董事会的性别多样化和企业创新:来自国际的证据Python与数据库交互——窗口函数
Stata之post命令——数据邮递爬虫俱乐部成员的Stata学习经验分享来啦!
Seminar丨2002年萨班斯·奥克斯利法案的经济后果我几乎画出了“隔壁三哥”家的国旗
Python基础——三大数字类型,你都了解吗?如何用Stata绘制带指向性箭头标注的图像
Seminar丨荐仆贷款——19世纪中国的信任辅助贷款
关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。